package com.fang.transfer.file.common;


import com.fang.transfer.file.common.code.ClientSendCode;
import com.google.gson.Gson;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public abstract class RequestListener<T> {


    /**
     * 请求处理
     *
     * @param param 通信参数
     * @return 通信返回值
     */
    public abstract void handle(T param) throws Exception;


    /**
     * 对应请求编码
     *
     * @return
     * @see ClientSendCode
     */
    public abstract String getCode();


    /**
     * json转为成参数
     *
     * @return
     */
    public Object jsonToParam(String jsonData) {
        Type type = getClass().getGenericSuperclass();
        if (!(type instanceof ParameterizedType)) {
            throw new RuntimeException("类型转换错误");
        }
        ParameterizedType parameterizedType = (ParameterizedType) type;
        Type generic = parameterizedType.getActualTypeArguments()[0];
        return new Gson().fromJson(jsonData, generic);
    }


}
